package sgsi.controller.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import sgsi.controller.dao.UsuarioDao;
import sgsi.model.entidades.Usuario;

public class UsuarioDaoHibernateImpl extends HibernateDaoSupport implements UsuarioDao {

	private static final String BUSCAR_POR_CODIGO = "select u from Usuario u where u.estaBorrado is false and u.codigoUsuario = ?";
	private static final String BUSCAR_POR_EMAIL  = "select u from Usuario u where u.estaBorrado is false and u.email = ?";
	private static final String BUSCAR_TODOS      = "select u from Usuario u where u.estaBorrado is false ";
	private static final String BUSCAR_POR_ROL    = "u.codigoRol = ";
	private static final String OBTENER_TODOS = "select u from Usuario u where u.estaBorrado is false order by u.codigoUsuario";
	
	public Usuario guardar(Usuario usuario) {
		getHibernateTemplate().saveOrUpdate(usuario);
		return usuario;
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> obtenerTodos() {
		return getHibernateTemplate().find(OBTENER_TODOS);
	}

	public Usuario obtenerPorCodigo(int codigo) {
		if (getHibernateTemplate().find(BUSCAR_POR_CODIGO,codigo).isEmpty()) {
			return null;
		}
		return (Usuario) getHibernateTemplate().find(BUSCAR_POR_CODIGO,codigo).get(0);
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> obtenerTodosBusqueda(int codigoRol, String nombre, String apellido) {
		String newQuery = BUSCAR_TODOS;
		newQuery += " and u.nombre like '%" + nombre + "%'";
		newQuery += " and u.apellido like '%" + apellido + "%'"; 
		if(codigoRol!=0){
			newQuery += " and " + BUSCAR_POR_ROL + codigoRol;
		}
		return getHibernateTemplate().find(newQuery);
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> obtenerTodosBusqueda(int codigoRol) {
		String newQuery = BUSCAR_TODOS;
		if(codigoRol!=0){
			newQuery += " and " + BUSCAR_POR_ROL + codigoRol;
		}
		return getHibernateTemplate().find(newQuery);

	}

	public Usuario obtenerUsuarioPorEmail(String email) {
		if (getHibernateTemplate().find(BUSCAR_POR_EMAIL,email).isEmpty()) {
			return null;
		}
		return (Usuario) getHibernateTemplate().find(BUSCAR_POR_EMAIL,email).get(0);
	}
}
